---
title: Discord Bot
description: Host agents as Discord Bots.
---

The Discord Bot integration allows you to serve Agents or Teams via Discord, using the discord.py library to handle Discord events and send messages.

## Setup Steps

<Snippet file="setup-discord-app.mdx" />

### Example Usage

Create an agent, wrap it with `DiscordClient`, and run it:

```python
from agno.agent import Agent
from agno.integrations.discord import DiscordClient
from agno.models.openai import OpenAIChat

basic_agent = Agent(
    name="Basic Agent",
    model=OpenAIChat(id="gpt-5-mini"), 
    add_history_to_context=True,
    num_history_runs=3,
    add_datetime_to_context=True,
)

discord_agent = DiscordClient(basic_agent)
if __name__ == "__main__":
    discord_agent.serve()
```

## Core Components

- `DiscordClient`: Wraps Agno agents/teams for Discord integration using discord.py.
- `DiscordClient.serve`: Starts the Discord bot client with the provided token.

## `DiscordClient` Class

Main entry point for Agno Discord bot applications.

### Initialization Parameters

| Parameter | Type              | Default | Description                           |
| --------- | ----------------- | ------- | ------------------------------------- |
| `agent`   | `Optional[Agent]` | `None`  | Agno `Agent` instance.                |
| `team`    | `Optional[Team]`  | `None`  | Agno `Team` instance.                 |

*Provide `agent` or `team`, not both.*

## Event Handling

The Discord bot automatically handles various Discord events:

### Message Events
- **Description**: Processes all incoming messages from users
- **Media Support**: Handles images, videos, audio files, and documents
- **Threading**: Automatically creates threads for conversations
- **Features**:
  - Automatic thread creation for each conversation
  - Media processing and forwarding to agents
  - Message splitting for responses longer than 1500 characters
  - Support for reasoning content display
  - Context enrichment with username and message URL

### Supported Media Types
- **Images**: Direct URL processing for image analysis
- **Videos**: Downloads and processes video content
- **Audio**: URL-based audio processing
- **Files**: Downloads and processes document attachments

## Environment Variables

Ensure the following environment variable is set:

```bash
export DISCORD_BOT_TOKEN="your-discord-bot-token"
```

## Message Processing

The bot processes messages with the following workflow:

1. **Message Reception**: Receives messages from Discord channels
2. **Media Processing**: Downloads and processes any attached media
3. **Thread Management**: Creates or uses existing threads for conversations
4. **Agent/Team Execution**: Forwards the message and media to the configured agent or team
5. **Response Handling**: Sends the response back to Discord, splitting long messages if necessary
6. **Reasoning Display**: Shows reasoning content in italics if available

## Features

### Automatic Thread Creation
- Creates a new thread for each user's first message
- Maintains conversation context within threads
- Uses the format: `{username}'s thread`

### Media Support
- **Images**: Passed as `Image` objects with URLs
- **Videos**: Downloaded and passed as `Video` objects with content
- **Audio**: Passed as `Audio` objects with URLs  
- **Files**: Downloaded and passed as `File` objects with content

### Message Formatting
- Long messages (>1500 characters) are automatically split
- Reasoning content is displayed in italics
- Batch numbering for split messages: `[1/3] message content`

## Testing the Integration

1. Set up your Discord bot token: `export DISCORD_BOT_TOKEN="your-token"`
2. Run your application: `python your_discord_bot.py`
3. Invite the bot to your Discord server
4. Send a message in any channel where the bot has access
5. The bot will automatically create a thread and respond

